<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //同步  代码按顺序执行  阻塞代码
      //异步  代码同时执行  不阻塞代码
      // ajax({
      //   success:function(){
      //     ajax({
      //       success:function(){
      //           ajax({
      //             success:function(){}
      //           })
      //       }
      //     })
      //   }
      // })
      // console.log(1)

      // promise（承诺）
      // 异步编程的一种解决方案
      // 可以将异步操作以同步操作的流程表达出来，避免了层层嵌套的回调函数
      // 解决了传统的 回调函数和事件方式 导致的 回调地狱问题
      // 有兼容解决方案。

      //               是一个容器，里面保存着 异步操作的  结果 （成功返回值，失败消息/失败的原因）
      //             -- 语法层面解释 ：Promise 是一个对象，从它可以获取异步操作的消息（成功返回值，失败消息/失败的原因）
      //             Promise对象是一个构造函数
      //             promise 特点/优点

      //       1）对象的状态不受外界的影响  (三种状态)
      //           状态：pending（进行中）、fulfilled（已成功）、rejected（已失败）
      //           只有异步操作的结果，可以决定当前是哪一种状态，任何其他操作都无法改变这个状态。

      //     2）一旦状态改变，就不会再变，任何时候都可以得到这个结果。 （2个结果）
      //     状太改变 2种情况：
      //     pending（进行中）变为 fulfilled（已成功） --- resolved
      //     pending（进行中）变为 rejected（已失败） --- rejected

      //     缺点：
      //   1、一旦新建它就会 立即执行 ，无法取消Promise
      //   2、如果不设置回调函数，Promise内部抛出的错误，不会反应到外部
      //   3、当处于pending状态时，
      //   无法得知目前进展到哪一个阶段（刚刚开始还是即将完成）。

      //   创建Promise
      // const p=new Promise((resolve,reject)=>{
      // 异步操作
      // 如果成功 将成功的返回值 放入resolve(值)
      // 如果成功 将失败的返回值 放入 rejecte(值)

      // })
      //   3、简写
      // 3-1、 只有成功
      // Promise.resolve( 成功的值 )
      // 3-2、 只有失败
      // Promise.rejecte( 失败的信息 )

      // 4、合并
      // 4-1、.all() 所有都 resolved 那么 resolved
      // 4-2、.race() 率先改变的 Promise 实例的返回值

      // 5、.finally()
      // 不管最后的状态如何 都会执行

      // es6
      // 如何理解promise
      //  es6新增 异步编程的一种解决方案
      //  可以将异步操作以同步操作的流程表达出，主要解决回调地狱
      //  promise有三种状态 pending（进行中）、fulfilled（已成功）、rejected（已失败）
      //  promise有俩种结果  resolve  reject
      //  pending（进行中）变为 fulfilled（已成功）
      //  pending（进行中）变为 rejected（已失败）
      //  promise调用的时候 使用的then和catch  成功和失败的执行函数
      //  promise还有简写的静态方法  promise.resolve 和promise.reject
      //  promise有all方法 是同时请求多个异步操作
      //  promise的race方法是竞争请求
      //  promise在es9新增一个finally的兜底操作
      // proxy
    </script>
  </body>
</html>
